﻿namespace PropOnline.Controllers
{
    using System.Collections.Generic;
    using System.Globalization;
    using System.Web.Mvc;
    using System.Web.Routing;
    using PropOnline.Helpers;
    using PropOnline.Stores;
    using PropOnline.ViewModels.Propiedad;
    using PropOnline.ViewModels.Shared;
    using PropOnline.ViewModels.Tasacion;

    [Authorize]
    public class TasacionController : BusquedaBaseController<BusquedaTasacionViewModel, ResultadoTasacionViewModel>
    {
        protected override ResultadoPropiedadesViewModel GetResultadoPropiedadesViewModel(BusquedaTasacionViewModel busquedaTasacion)
        {
            return new ResultadoPropiedadesTasacionViewModel
            {
                Propiedades = this.BuscarTasacion((BusquedaTasacionViewModel)busquedaTasacion),
                RetryBusquedaUrl = Url.Action("Buscar", busquedaTasacion),
                BusquedaMoneda = PropiedadHelper.GetMonedaForOperacion(busquedaTasacion.Operacion),
                BusquedaSuperficie = busquedaTasacion.Superficie,
                PagingEnabled = false
            };
        }

        protected override ResultadoTasacionViewModel GetResultadoViewModel(BusquedaTasacionViewModel busquedaViewModel)
        {
            return new ResultadoTasacionViewModel
            {
                BusquedaViewModel = busquedaViewModel,
                BusquedaCurrentUrl = Url.Action("Busqueda", busquedaViewModel)
            };
        }      

        private IEnumerable<PropiedadResultadoViewModel> BuscarTasacion(BusquedaTasacionViewModel busquedaTasacion)
        {
            int altura = busquedaTasacion.Altura.HasValue ? busquedaTasacion.Altura.Value : 0;

            decimal latitud = 0;
            decimal.TryParse(busquedaTasacion.Latitud, NumberStyles.Float, CultureInfo.InvariantCulture, out latitud);

            decimal longitud = 0;
            decimal.TryParse(busquedaTasacion.Longitud, NumberStyles.Float, CultureInfo.InvariantCulture, out longitud);          

            return new PropiedadStore().BuscarTasacion(latitud, longitud, busquedaTasacion.Calle, altura, busquedaTasacion.Ambientes, busquedaTasacion.Dependencia, busquedaTasacion.Superficie, busquedaTasacion.TipoPropiedad, busquedaTasacion.ZonaId, busquedaTasacion.Operacion);
        }     
    }
}
